import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:nyh_motorcade_app/constant/constant.dart';
import 'package:nyh_motorcade_app/entity/vehicle_info_entity.dart';
import 'package:nyh_motorcade_app/pages/driver_manage/driver_details/vehicle_info/vehicle_info_controller.dart';
import 'package:nyh_motorcade_app/styles/colors.dart';
import 'package:nyh_motorcade_app/widgets/flexible_icon_text.dart';
import 'package:nyh_motorcade_app/widgets/multi_state/multi_state_widget.dart';
import 'package:nyh_motorcade_app/widgets/text_button_with_icon.dart';
import 'package:nyh_motorcade_app/widgets/text_with_icon.dart';
import 'package:nyh_motorcade_app/widgets/vehicle_icon.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';

class VehicleInfoPage extends StatelessWidget {
  final String driverId;
  final String motorcadeId;

  VehicleInfoPage(this.driverId, this.motorcadeId);

  @override
  Widget build(BuildContext context) {
    String tag = DateTime.now().millisecondsSinceEpoch.toString();
    final controller = Get.put(VehicleInfoController(), tag: tag);
    controller.initData(driverId, motorcadeId);
    return Stack(
      alignment: AlignmentDirectional.center,
      fit: StackFit.expand,
      children: [
        GetBuilder<VehicleInfoController>(
          tag: tag,
          builder: (controller) {
            return SmartRefresher(
              controller: controller.refreshController,
              enablePullDown: true,
              enablePullUp: true,
              onRefresh: controller.onRefresh,
              onLoading: controller.onLoading,
              child: MultiStateWidget(
                child: ListView.builder(
                  shrinkWrap: true,
                  physics: BouncingScrollPhysics(),
                  itemBuilder: (context, index) {
                    return buildItemWidget(controller, index);
                  },
                  itemCount: controller.vehicleList.length,
                ),
                state: controller.multiState,
                onRetry: () {
                  controller.onRetry();
                },
                model: MultiModel.tint,
              ),
            );
          },
        ),
        Positioned(
          right: 16.w,
          bottom: 16.w,
          child: GestureDetector(
            onTap: () {
              controller.goToBindVehiclePage();
            },
            child: Image.asset("images/ic_bind_circle.png"),
          ),
        ),
      ],
    );
  }

  Widget buildItemWidget(VehicleInfoController controller, int index) {
    if (controller.vehicleList.isEmpty) {
      return Container();
    }
    VehicleInfoItem entity = controller.vehicleList[index];
    return Container(
      margin: EdgeInsets.only(left: 16.w, right: 16.w, bottom: 12.w),
      decoration: BoxDecoration(
        color: Colours.color_white,
        borderRadius: BorderRadius.circular(10.w),
      ),
      child: ClipRRect(
        borderRadius: BorderRadius.circular(10.w),
        child: Material(
          child: InkWell(
            onTap: () {
              controller.goToVehicleDetails(entity.id);
            },
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Padding(
                  padding: EdgeInsets.symmetric(vertical: 13.w, horizontal: 16.w),
                  child: Row(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      VehicleIcon(entity.type ?? "", entity.vehicleNumber ?? ""),
                      SizedBox(
                        width: 16.w,
                      ),
                      Expanded(
                        child: Column(
                          crossAxisAlignment: CrossAxisAlignment.start,
                          children: [
                            Row(
                              children: [
                                Expanded(
                                  child: Row(
                                    mainAxisSize: MainAxisSize.min,
                                    children: [
                                      Flexible(
                                        child: Text(
                                          entity.vehicleNumber ?? "",
                                          style: TextStyle(
                                            color: Colours.color_text_theme,
                                            fontSize: 16.sp,
                                            fontWeight: FontWeight.bold,
                                          ),
                                          maxLines: 1,
                                          overflow: TextOverflow.ellipsis,
                                        ),
                                      ),
                                      Visibility(
                                        visible: (entity.belongToType ?? "").isNotEmpty,
                                        child: Container(
                                          margin: EdgeInsets.only(left: 8.w),
                                          padding: EdgeInsets.only(left: 5.w, right: 5.w, bottom: 1.w),
                                          decoration: BoxDecoration(
                                            color: (entity.belongToType ?? "") == Constant.OWN_VEHICLE ? Colours.color_34c759 : Colours.color_theme,
                                            borderRadius: BorderRadius.circular(5.w),
                                            border: Border.all(width: 1.w, color: (entity.belongToType ?? "") == Constant.OWN_VEHICLE ? Colours.color_34c759 : Colours.color_theme),
                                          ),
                                          child: Text(
                                            entity.belongToTypeName ?? "",
                                            style: TextStyle(
                                              color: Colours.color_white,
                                              fontSize: 10.sp,
                                            ),
                                          ),
                                        ),
                                      ),
                                      Visibility(
                                        visible: (entity.type ?? "").isNotEmpty,
                                        child: Container(
                                          margin: EdgeInsets.only(left: 8.w),
                                          padding: EdgeInsets.only(left: 5.w, right: 5.w, bottom: 1.w),
                                          decoration: BoxDecoration(
                                            color: Colours.color_white,
                                            borderRadius: BorderRadius.circular(5.w),
                                            border: Border.all(width: 1.w, color: Colours.color_6f7082),
                                          ),
                                          child: Text(
                                            entity.typeName ?? "",
                                            style: TextStyle(
                                              color: Colours.color_6f7082,
                                              fontSize: 10.sp,
                                            ),
                                          ),
                                        ),
                                      ),
                                    ],
                                  ),
                                ),
                                SizedBox(
                                  width: 10.w,
                                ),
                                Visibility(
                                  visible: entity.bindingVehicle ?? false,
                                  child: TextButtonWithIcon(
                                    onPressed: () {
                                      showUnboundDialog(controller, entity.id);
                                    },
                                    icon: Image.asset("images/ic_unbound.png"),
                                    label: Text(
                                      "解绑",
                                      style: TextStyle(
                                        color: Colours.color_6f7082,
                                        fontSize: 14.sp,
                                      ),
                                    ),
                                    textIconPadding: 3.w,
                                    style: ButtonStyle(
                                      tapTargetSize: MaterialTapTargetSize.shrinkWrap,
                                      minimumSize: MaterialStateProperty.all(Size(0, 0)),
                                      padding: MaterialStateProperty.all(EdgeInsets.all(0.w)),
                                    ),
                                  ),
                                ),
                              ],
                            ),
                            SizedBox(
                              height: (entity.motorcadeName ?? "").isNotEmpty ? 5.w : 0,
                            ),
                            Visibility(
                              visible: (entity.motorcadeName ?? "").isNotEmpty,
                              child: TextWithIcon(
                                text: entity.motorcadeName ?? "",
                                textStyle: TextStyle(
                                  color: Colours.color_9fa0ab,
                                  fontSize: 12.sp,
                                ),
                                iconName: "images/ic_motorcade.png",
                                iconHeight: 14.w,
                                iconWidth: 14.w,
                                iconColor: Colours.color_9fa0ab,
                                textIconPadding: 5.w,
                              ),
                            ),
                            SizedBox(
                              height: (entity.subCompanyList ?? []).isNotEmpty ? 5.w : 0,
                            ),
                            FlexibleIconText(
                              icon: Image.asset(
                                "images/ic_company.png",
                                height: 14.w,
                                width: 14.w,
                                color: Colours.color_9fa0ab,
                              ),
                              textList: entity.subCompanyList,
                              iconTextPadding: 5.w,
                              textStyle: TextStyle(
                                color: Colours.color_9fa0ab,
                                fontSize: 12.sp,
                              ),
                            ),
                          ],
                        ),
                      ),
                    ],
                  ),
                ),
                Visibility(
                  visible: (entity.remake ?? "").isNotEmpty,
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Divider(
                        color: Colours.color_divider,
                        height: 1.w,
                        thickness: 1.w,
                      ),
                      Padding(
                        padding: EdgeInsets.symmetric(
                          vertical: 10.w,
                          horizontal: 16.w,
                        ),
                        child: Text(
                          entity.remake ?? "",
                          style: TextStyle(
                            color: Colours.color_cfcfd5,
                            fontSize: 12.sp,
                          ),
                          maxLines: 1,
                          overflow: TextOverflow.ellipsis,
                        ),
                      ),
                    ],
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }

  void showUnboundDialog(VehicleInfoController controller, String? id) {
    showCupertinoDialog(
      barrierDismissible: true,
      context: Get.context!,
      builder: (c) {
        return CupertinoAlertDialog(
          content: Text(
            controller.getUnboundWarn(),
            style: TextStyle(
              color: Colours.color_text_theme,
              fontSize: 14.sp,
            ),
          ),
          actions: [
            CupertinoDialogAction(
              child: Text(
                "取消",
                style: TextStyle(color: Colours.color_6f7082, fontSize: 14.sp),
              ),
              onPressed: () {
                //Navigator.pop(c);
                Get.back();
              },
            ),
            CupertinoDialogAction(
              child: Text(
                "确定",
                style: TextStyle(color: Colours.color_theme, fontSize: 14.sp),
              ),
              onPressed: () {
                //Navigator.pop(c);
                Get.back();
                controller.unboundVehicle(id);
              },
            ),
          ],
        );
      },
    );
  }
}
